package dominio;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name = "items")
public class Item implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Integer id;
	private Rodamiento rodamiento;
	private Float precio;
	private Integer cantidad;
	private Integer cantidadSatisfecha;
	private String nombreLista;//indica de que lista se obtuvo el item de una cotizacion, es utilizado para armar la orden de compra
	private Boolean isOferta; //indica si el item pertenece a una lista de oferta
	private Proveedor proveedor;
	/*Al llegar una solicitud de un rodamiento, busco en cada lista de precio,
	 * si el precio es el mejor, pero no alcanza la cantidad, compro estos y sigo con el siguiente
	 * item por mejor precio.
	 * */
	
	public Item(){};
	
	public Item(Integer id , Rodamiento rodamiento,
			Float precio, Integer cantidad, String nombreLista, boolean isOferta) {
		super();
		this.id = id;
		this.rodamiento = rodamiento;
		this.precio = precio;
		this.cantidad = cantidad; 
		this.nombreLista = nombreLista;
		this.isOferta = isOferta;
	}
	
	public Item(Rodamiento rodamiento, Integer cantidad){
		super();
		this.rodamiento = rodamiento;
		this.cantidad = cantidad;
	}
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}
	
	//si guardo el item, q guarde el rodamiento si no existe (s�lo guardar en cascada).
	@OneToOne
	public Rodamiento getRodamiento() {
		return rodamiento;
	}

	public void setRodamiento(Rodamiento rodamiento) {
		this.rodamiento = rodamiento;
	}
	public Float getPrecio() {
		return precio;
	}
	public void setPrecio(Float precio) {
		this.precio = precio;
	}
	public Integer getCantidad() {
		return cantidad;
	}
	public void setCantidad(Integer cantidad) {
		this.cantidad = cantidad;
	}

	public Integer getCantidadSatisfecha() {
		return cantidadSatisfecha;
	}

	public void setCantidadSatisfecha(Integer cantidadSatisfecha) {
		this.cantidadSatisfecha = cantidadSatisfecha;
	}

	public void setNombreLista(String nombreLista) {
		this.nombreLista = nombreLista;
	}

	public String getNombreLista() {
		return nombreLista;
	}

	public void setIsOferta(Boolean isOferta) {
		this.isOferta = isOferta;
	}

	public Boolean getIsOferta() {
		return isOferta;
	}

	@ManyToOne
	@JoinColumn(name = "idProveedor")
	public Proveedor getProveedor() {
		return proveedor;
	}	

	public void setProveedor(Proveedor proveedor) {
		this.proveedor = proveedor;
	}

	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Item other = (Item) obj;
		if (rodamiento == null) {
			if (other.rodamiento != null)
				return false;
		} else if (!rodamiento.equals(other.rodamiento))
			return false;
		return true;
	}	
	
}
